const { resits } = require('./resits');

const apiList = [
    'v1/resits'
];

module.exports.registerAll = (app) => {

    // 判断是不是未通过 api域名 来访问 api
    app.use(async (ctx, next) => {
        let subDomains = ctx.hostname.split('.');
        // 如果二级域名不是 .api
        if (!(2 === subDomains.length && 'api' === subDomains[0])) {
            // 如果这是一个 api 的 url
            if (-1 !== apiList.indexOf(ctx.path.match(/v\d+\/\w+/)[0])) {
                ctx.status = 403;
                return ctx.body =  {
                    error: '你必须通过 api 子域名来访问 api'
                }
            }
        }
        await next();
    });

    // 判断是否是跨域API，设置跨域响应头
    app.use(async (ctx, next) => {
        if (-1 !== apiList.indexOf(ctx.path.match(/v\d+\/\w+/)[0])) {
            ctx.set({
                'Access-Control-Allow-Origin': ctx.headers.origin,
                'Access-Control-Allow-Methods': 'POST, DELETE, PUT, GET'
            });
        }
        await next();
    });

    // 注册 GET v<ver>/resits
    for (let i in resits) {
        app.use(resits[i]);
    }

    // 处理不存在的 api 访问
    app.use(async (ctx, next) => {
        let subDomains = ctx.hostname.split('.');
        // 如果是 api 二级域名
        if (2 === subDomains.length && 'api' === subDomains[0]) {
            ctx.status = 404;
            return ctx.body = {
                error: '你访问的 api 不存在'
            }
        }
        await next();
    });
}